package br.edu.fanor.esfinge.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.edu.fanor.esfinge.enumer.StatusUsuario;


@Entity
@Table(name="usuario")
public class Usuarios implements Serializable {



        private static final long serialVersionUID = 1L;
        
        @Id
        @Column(name="usuario_id")
        @SequenceGenerator(name="seq_usuario", sequenceName="seq_usuario", allocationSize=1)
        @GeneratedValue(generator="seq_usuario", strategy=GenerationType.SEQUENCE)
        private Long id;
        private String nome;
        private String usuario;
        private String senha;
        private String email;
        private String urlFoto;
        
        @OneToMany(mappedBy = "autor")
        private List<Resumos> resumos;
        
        @OneToMany(mappedBy = "usuarioId")
        private List<VerResumo> verResumo;
        
        @Column(name="status_usuario", nullable=false)
        private Integer statusUsuario;

		public Long getId() {
			return id;
		}

		public void setId(Long id) {
			this.id = id;
		}

		public String getNome() {
			return nome;
		}

		public void setNome(String nome) {
			this.nome = nome;
		}

		public String getUsuario() {
			return usuario;
		}

		public void setUsuario(String usuario) {
			this.usuario = usuario;
		}

		public String getSenha() {
			return senha;
		}

		public void setSenha(String senha) {
			this.senha = senha;
		}

		public String getEmail() {
			return email;
		}

		public void setEmail(String email) {
			this.email = email;
		}

		public String getUrlFoto() {
			return urlFoto;
		}

		public void setUrlFoto(String urlFoto) {
			this.urlFoto = urlFoto;
		}

		public List<Resumos> getResumos() {
			return resumos;
		}

		public void setResumos(List<Resumos> resumos) {
			this.resumos = resumos;
		}

		public List<VerResumo> getVerResumos() {
			return verResumo;
		}

		public void setVerResumos(List<VerResumo> verResumo) {
			this.verResumo = verResumo;
		}
		
        public StatusUsuario getStatusUsuario() {
            return StatusUsuario.getStatusUsuario(this.statusUsuario);
        }

        public void setStatusUsuario(StatusUsuario statusUsuario) {
            this.statusUsuario = statusUsuario != null ? statusUsuario
                            .getCodigo() : null;
        }

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result + ((id == null) ? 0 : id.hashCode());
			return result;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Usuarios other = (Usuarios) obj;
			if (id == null) {
				if (other.id != null)
					return false;
			} else if (!id.equals(other.id))
				return false;
			return true;
		}

	
		
		@Override
		public String toString() {
			return "UsuarioDAO [id=" + id + ", nome=" + nome + ", usuario="
					+ usuario + ", senha=" + senha + ", email=" + email
					+ ", urlFoto=" + urlFoto + ", resumos=" + resumos
					+ ", verResumo=" + verResumo + ", statusUsuario="
					+ statusUsuario + "]";
		}
 
}